package xin.zhiyin.服务.书.实现;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import xin.zhiyin.实体.书Entity;
import xin.zhiyin.实体.书类目Entity;
import xin.zhiyin.仓库.书.书类目Repository;
import xin.zhiyin.服务.书.书Service;
import xin.zhiyin.服务.书.书类目Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@Transactional(rollbackFor = Exception.class)
public class 书类目Service实现 implements 书类目Service {

    @Autowired
    private 书类目Repository 类目Dao;
    @Autowired
    private 书Service 书Service;


    @Override
    public void 保存(书类目Entity 书类目) {
        类目Dao.save(书类目);
    }

    @Override
    public 书类目Entity 根据Id获取书类目(Long id) {
        书类目Entity 类目 =  new 书类目Entity();
        Optional<书类目Entity> op = 类目Dao.findById(id);
        if(op.isPresent())
        {
            类目 = op.get();
        }
        return 类目;
    }

    @Override
    public List<书类目Entity> 根据ParentId获取书类目(Long parentId) {
        return 类目Dao.findByParentId(parentId);
    }

    @Override
    public List<书类目Entity> 获取所有书类目() {
        书类目Entity 含子类目的类目 = new 书类目Entity();
        List<书类目Entity> 总类目列表 = new ArrayList<书类目Entity>();
        List<书类目Entity> 含子类目的总类目列表 = new ArrayList<书类目Entity>();


        总类目列表 = 类目Dao.findAll();
        for(int i = 0;i<总类目列表.size();i++)
        {
            List<书类目Entity> 子类目列表 = new ArrayList<书类目Entity>();
            含子类目的类目 = 总类目列表.get(i);
            for(int j = 0;j<总类目列表.size();j++)
            {
                if(总类目列表.get(j).getParentId() == 含子类目的类目.getId())
                {
                    子类目列表.add(总类目列表.get(j));
                }
            }
            if(子类目列表.size() > 0 )
            {
                含子类目的类目.setChildrenCategoryList(子类目列表);
            }
            含子类目的类目.setChildrenCategorySize(子类目列表.size());

            含子类目的总类目列表.add(含子类目的类目);
        }
        return 含子类目的总类目列表;
    }

    @Override
    public void 更新(书类目Entity channel) {
        书类目Entity 类目 = 类目Dao.findById(channel.getId()).get();
        BeanUtils.copyProperties(channel, 类目);
        类目Dao.save(类目);
    }

    @Override
    public boolean 批量删除(List categoryIds) {
        for(int i=0;i<categoryIds.size();i++)
        {
            List<书Entity> 书列表 = 书Service.根据categoryId获取书((Long) categoryIds.get(i));
            if(书列表.size()>0)
            {
                return false;
            }
        }

        /* 有子类目的不能删除，暂时还未实现此功能 */

        类目Dao.批量删除(categoryIds);
        return true;
    }
}
